http://blog.csdn.net/qq_34369618/article/details/52950367

 

 

 

概述

 

官网:http://www.graphviz.org/

Graphviz (Graph Visualization Software) 是一个由AT&T实验室启动的开源工具包。DOT是一种图形描述语言,非常简单的,

Graphviz就是用来处理这种语言的工具。只需要简单了解一下DOT语言,就可以用Graphviz绘图了,它对程序员特别有用。

So in short, if you are a programmer, it is born for you。

 

无向图

[java] view plain copy

  1. graph graphname {
  2.     a — b — c;
  3.     b — d;
  4. }

 

有向图

[java] view plain copy

  1. digraph graphname {
  2.     a -> b -> c;
  3.     b -> d;
  4. }

 

属性

[java] view plain copy

  1. //DOT语言中,可以对节点和边添加不同的属性。
  2. digraph graphname {
  3.     //节点的属性,节点的名称
  4.     a [lable = “Foo”];
  5.     //节点的属性,节点的形状
  6.     b [shape = box];
  7.     //边的属性,边的颜色
  8.     a -> b -> c [color = blue];
  9.     //边的属性,边的线状
  10.     b -> d [style = dotted];
  11. }

 

基本图形

[java] view plain copy

  1. digraph G {
  2. //把图片的尺寸设为4inch * 4inch
  3. size = “4,4”;
  4. main [shape = box];
  5. //边的重要程度,默认是1
  6. main->parse [weight = 8];
  7. parse->execute;
  8. //点状线
  9. main->init[style = dotted];
  10. main->cleanup;
  11. //连接了两条线
  12. execute->{make_string;printf}
  13. init->make_string;
  14. //把边的默认颜色设为red
  15. edge [color = red];
  16. main->printf [sytle=bold, label = “100times”];
  17. //节点的名称
  18. make_string [label = “make a\nstring”];
  19. //设置节点的默认属性
  20. node [shape=box,style =filled,color=lightgrey];
  21. execute->compare;
  22. }

 

 

多边形

[java] view plain copy

  1. digraph G{
  2. a -> b -> c;
  3. b -> d;
  4. /* 形状为多边形,边数为5,外框为3条,颜色为淡蓝,样式为填充 */
  5. a [shape = polygon, sides = 5, peripheries = 3, color = lightblue, style = filled];
  6. /* 形状为多边形,边数为4,角的倾斜度为0.4,内容为hellow world*/
  7. c [shape = polygon, sides = 4, skew = 0.4, label = “hello world”];
  8. /* 形状为倒三角,整体旋转30度 */
  9. d [shape = invtriangle,orientation = 30];
  10. /* 形状为多边形,边数为4,扭曲度为0.7 */
  11. e [shape = polygon, sides = 4, distortion = 0.7];
  12. }

 

 

数据结构

 

(1)复杂的标签

[java] view plain copy

  1. digraph structs {
  2. /* 把节点的默认形状设为矩形record,默认的是圆角矩形Mrecord */
  3. node [shape = record];
  4. struct1 [label = “left|middle|right”];
  5. struct2 [label = “one|two”];
  6. struct3 [label = “hello\nworld|{b|{c|d|e}|f}|g|h”];
  7. struct1 -> struct2;
  8. struct1 -> struct3;
  9. }

 

[java] view plain copy

  1. graph picture {
  2. //这幅图的名字
  3. label = “I love you”;
  4. //图名字的位置在bottom,也可以是t
  5. labelloc = b;
  6. //图名字的位置在left,也可以是r
  7. labeljust = l;
  8. edge[decorate = true];
  9. C — D [label = “s1”];
  10. C — E [label = “s2”];
  11. C — F [label = “s3”];
  12. D — E [label = “s4”];
  13. D — F [label = “s5”];
  14. edge[decorate = false, labelfontcolor = blue, fontcolor = red];
  15. C1 — D1 [headlabel = “c1”,taillabel = “d1”,label = “c1 – d1”];
  16. }

 

(2)行列对齐

[java] view plain copy

  1. digraph html {
  2. rankdir = LR;
  3. {
  4. node[shape = plaintext];
  5. 1995 -> 1996 -> 1997 -> 1998 -> 1999 -> 2000 -> 2001;
  6. }
  7. {
  8. node[shape = box, style = filled];
  9. WAR3 -> Xhero -> Footman -> DOTA:
  10. WAR3 -> Battleship;
  11. }
  12. {rank = same; 1996; WAR3;}
  13. {rank = same; 1998; Xhero; Battleship;}
  14. {rank = same; 1999; Footman;}
  15. {rank = same; 2001; DOTA;}
  16. }

 

 

(3)二叉树

[java] view plain copy

  1. digraph G {
  2. label = “Binary search tree”;
  3. node [shape = record];
  4. A [label = “<f0>|<f1>A|<f2>”];
  5. B [label = “<f0>|<f1>B|<f2>”];
  6. C [label = “<f0>|<f1>C|<f2>”];
  7. D [label = “<f0>|<f1>D|<f2>”];
  8. E [label = “<f0>|<f1>E|<f2>”];
  9. F [label = “<f0>|<f1>F|<f2>”];
  10. G [label = “<f0>|<f1>G|<f2>”];
  11. A:f0 -> B:f1;
  12. A:f2 -> C:f1;
  13. B:f0 -> D:f1;
  14. B:f2 -> E:f1;
  15. C:f0 -> F:f1;
  16. C:f2 -> G:f1;
  17. }

 

 

(4)哈希表

[java] view plain copy

  1. digraph G{
  2. nodesep = .05;
  3. rankdir = LR;
  4. node [shape = record,width = .1,height = .1];
  5. node0 [label = “<f0>|<f1>|<f2>|<f3>|<f4>|<f5>|<f6>|”,height = 2.5];
  6. node [width = 1.5];
  7. node1 [label = “{<n>n14|719|<p>}”];
  8. node2 [label = “{<n>a1|805|<p>}”];
  9. node3 [label = “{<n>i9|718|<p>}”];
  10. node4 [label = “{<n>e5|989|<p>}”];
  11. node5 [label = “{<n>t20|959|<p>}”];
  12. node6 [label = “{<n>o15|794|<p>}”];
  13. node7 [label = “{<n>s19|659|<p>}”];
  14. node0:f0 -> node1:n;
  15. node0:f1 -> node2:n;
  16. node0:f2 -> node3:n;
  17. node0:f5 -> node4:n;
  18. node0:f6 -> node5:n;
  19. node2:p -> node6:n;
  20. node4:p -> node7:n;
  21. }

 

流程图

[java] view plain copy

  1. digraph G{
  2. subgraph cluster0 {
  3. node [style = filled,color = white];
  4. style = filled;
  5. color = lightgrey;
  6. a0 -> a1 -> a2 -> a3;
  7. label = “process #1”;
  8. }
  9. subgraph cluster1 {
  10. node [style = filled];
  11. b0 -> b1 -> b2 -> b3;
  12. label = “process #2”;
  13. color = blue;
  14. }
  15. start -> a0;
  16. start -> b0;
  17. a1 -> b3;
  18. b2 -> a3;
  19. a3 -> a0;
  20. a3 -> end;
  21. b3 -> end;
  22. start [shape = Mdiamond];
  23. end [shape = Msquare];
  24. }

发表评论

电子邮件地址不会被公开。